#include <my_header.h>
// 使用dup函数复制旧文件描述符 并运用新旧文件描述符
// 写入同一文件
/* Usage: ./5_dup filename */
int main(int argc, char *argv[]){                                  
    ARGS_CHECK(argc, 2);
    // 被复制的旧文件描述符
    int old_fd = open(argv[1], O_RDWR);
    ERROR_CHECK(old_fd, -1, "open");
    printf("old_fd = %d\n", old_fd);

    int new_fd = dup(old_fd);
    ERROR_CHECK(new_fd, -1, "open");
    printf("new_fd = %d\n", new_fd);

    // 将helloworld写入同一文件
    write(old_fd, "hello", 5);
    write(new_fd, "world", 5);

    // 关闭文件描述符
    close(old_fd);
    close(new_fd);
    return 0;
}

#if 0
打印的两个新旧文件描述符，必然是不一样的。这就好比两
个指针指向同一个对象，但这两个指针变量本身的地址肯定
是不同的。

其次dup复制文件描述符的过程，既然可以类比指针指向同一
对象，那么使用任一文件描述符修改文件信息，这个修改对于
所有文件描述符都是同步的。

并且在这个过程中两个文件描述符，共享同一个文件对象的读
写偏移量，也就是共享读写的位置。（因为它们本来就是同一
个文件对象）

close一个文件描述符，内核区域的文件对象会被释放资源吗？
当然不会，某个文件对象的所有文件描述符都被关闭后，才会
释放此文件对象！
#endif
